/**
 * 
 */
package cl.utfsm.inf.lp;

/**
 * @author ffullenk
 * clase que representa al Tablero
 * contiene su tamanio y arreglos para contener los personajes y objetos
 *
 */
public class Tablero {

	
	private int tamanioTablero;
	private Integer cantPersonajes;
	private Integer cantObjetos;
	public PersonajeExt arregloPersonaje[];
	public ObjetoExt arregloObjeto[];
	
	Tablero()
	{
		this.setTamanioTablero(0);
		this.setCantPersonajes(0);
		this.setCantObjetos(0);
	}

	public void setCantObjetos(Integer cantObjetos) {
		this.cantObjetos = cantObjetos;
	}

	public Integer getCantObjetos() {
		return cantObjetos;
	}

	public void setCantPersonajes(Integer cantPersonajes) {
		this.cantPersonajes = cantPersonajes;
	}

	public Integer getCantPersonajes() {
		return cantPersonajes;
	}

	public void setTamanioTablero(Integer tamanioTablero) {
		this.tamanioTablero = tamanioTablero;
	}

	public Integer getTamanioTablero() {
		return tamanioTablero;
	}

	public void setArregloPersonaje(PersonajeExt arregloPersonaje[]) {
		this.arregloPersonaje = arregloPersonaje;
	}

	public PersonajeExt[] getArregloPersonaje() {
		//	retorna el arreglo de personajes
		
		return arregloPersonaje;
	}

	public void setArregloObjeto(ObjetoExt arregloObjeto[]) {
		//recibe un arreglo de objetos
		this.arregloObjeto = arregloObjeto;
	}

	public ObjetoExt[] getArregloObjeto() {
		return arregloObjeto;
	}
	
	/** moverPersonajes
	 * Toma el arreglo de personajes del objeto Tablero y por cada personaje
	 * verifica su estado y su proximo movimiento, si este movimiento pertenece al tablero
	 * se realiza el movimiento
	 */
	public void moverPersonajes()
	{
		for(PersonajeExt per : this.getArregloPersonaje())
		{
			if(per.getEstado() && this.verificarMovimiento(per,per.getMovimiento()[0], per.getMovimiento()[1]))per.mover();
		}
	}
	
	/**
	 * Verificar movimiento
	 * @param per
	 * @param movx
	 * @param movy
	 * @return boolean
	 * Recibe el personaje a mover, y sus pertinentes movimientos
	 * evalua por cada cordenada del personaje si su posicion + el movimiento son mayores que el tamanio del tablero
	 * si es alguna de las coordenadas es mayor, entonces se retorna false
	 * y se bloquea el movimiento del personaje
	 */
	public boolean verificarMovimiento(Personaje per, int movx, int movy)
	{
		if(((per.getPosicion()[0] + movx) > (this.tamanioTablero - 1)) || ((per.getPosicion()[1] + movy) > (this.tamanioTablero - 1)))return false;
		else return true;
	}
	
	
}
